home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib10.dsk
/
SCREEN BUILDING SUBROUTINE.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
6KB
|
171 lines
1 REM *****************************
2 REM * SCREEN BUILDING DEMO *
3 REM * BY E. STEPHEN FREEMAN *
4 REM * COPYRIGHT (C) 1982 *
5 REM * BY MICRO-SPARC INC *
6 REM * LINCOLN, MA. 01773 *
7 REM * ALL RIGHTS RESERVED *
8 REM *****************************
100 DIM T1$(25),T2$(25),T3$(25),T4$(25),T5$(25),T6$(25),T7$(25),T8$(25),T9$(25),TA$(25)
110 DIM ZA$(25),ZD(25),ZI(25),ZJ(25),ZK$(25),ZE(25),ZH$(25),ZL$(25),ZF$(25),ZQ$(25),ZW$(25),ZX(25)
120 IX = 1
130 HOME : VTAB 23: INPUT "NEXT SCREEN # ( 01, 02, 03 ETC.)";X$
140 ZB$ = "SCREEN#" +X$
150 GOSUB 60000
160 IF ZP = 1 GOTO 130
170 T1$(IX) = ZQ$(1)
180 T2$(IX) = ZQ$(2)
190 T3$(IX) = ZQ$(3)
200 T4$(IX) = ZQ$(4)
210 T5$(IX) = ZQ$(5)
220 T6$(IX) = ZQ$(6)
230 T7$(IX) = ZQ$(7)
240 T8$(IX) = ZQ$(8)
250 T9$(IX) = ZQ$(9)
260 TA$(IX) = ZQ$(10)
270 HOME : VTAB 23: INPUT "NEXT SCREEN NUMBER OR F)INISHED? ";X$
280 IF X$ = "F" THEN GOTO 310
290 IX = IX +1
300 GOTO 140
310 HOME : FOR K = 1 TO IX
320 PRINT T1$(K)
330 PRINT T2$(K)
340 PRINT T3$(K)
350 PRINT T4$(K)
360 PRINT T5$(K)
370 PRINT T6$(K)
380 PRINT T7$(K)
390 PRINT T8$(K)
400 PRINT T9$(K)
410 PRINT TA$(K)
420 NEXT K
430 END
440 DATA "SCREEN#0304"
450 DATA "H1000TEST SCREEN # THREE"
460 DATA "D1310042N201-NUMERIC"
470 DATA "D1510042A002-ALPHA "
480 DATA "D1710062D003-DATE (MMDDYY)"
490 DATA "SCREEN#0112"
500 DATA "H0200TEST SCREEN # 1"
510 DATA "H0400PERSONAL PROFILE"
520 DATA "D0705251C001-NAME"
530 DATA "D0805252C002-ADD1"
540 DATA "D0905252C003-ADD2"
550 DATA "D1005252C004-ADD3"
560 DATA "D1105052N005-ZIP "
570 DATA "D1705081N006-PHONE"
580 DATA "D1905112N007-SS # "
590 DATA "D2105062D008-DOB "
600 DATA "D1728011A009-SEX"
610 DATA "D1928011A010-M/S"
620 DATA "SCREEN#1004"
630 DATA "H1000DECIMAL TEST SCREEN"
640 DATA "D1510062N201-NUMERIC"
650 DATA "D1710082N402-N 4 D "
660 DATA "D1910082N003-N O D "
670 DATA "END-OF-DATA"
60000 HOME : RESTORE : FOR Z2 = 1 TO 25:ZQ$(Z2) = "": NEXT Z2:ZP = 0
60002 READ ZA$(1)
60004 IF ZA$(1) = "END-OF-DATA" THEN GOTO 60138
60006 IF LEFT$(ZA$(1),9) < >ZB$ THEN 60002
60008 ZC = VAL( RIGHT$(ZA$(1),2))
60010 FOR Z = 1 TO ZC
60012 READ ZA$(Z)
60014 ZD(Z) = VAL( MID$ (ZA$(Z),2,2))
60016 ZE(Z) = VAL( MID$ (ZA$(Z),4,2))
60018 ZF$(Z) = LEFT$(ZA$(Z),1)
60020 IF ZF$(Z) = "D" THEN 60032
60022 ZG = LEN(ZA$(Z)) -5
60024 ZH$(Z) = RIGHT$(ZA$(Z),ZG)
60026 IF ZE(Z) = 0 THEN ZE(Z) = INT(40 -ZG)/2
60028 VTAB ZD(Z): HTAB ZE(Z): PRINT ZH$(Z)
60030 GOTO 60044
60032 ZI(Z) = VAL( MID$ (ZA$(Z),6,2))
60034 ZJ(Z) = VAL( MID$ (ZA$(Z),8,1))
60036 ZK$(Z) = MID$ (ZA$(Z),9,1)
60038 ZX(Z) = VAL( MID$ (ZA$(Z),10,1))
60040 ZW$(Z) = MID$ (ZA$(Z),11,2)
60042 GOSUB 60180
60044 NEXT Z
60046 Z1 = 1
60048 FOR Z = 1 TO ZC
60050 IF ZU < >1 THEN 60060
60052 IF ZF$(Z) = "H" THEN 60120
60054 IF ZV < > VAL(ZW$(Z)) THEN Z1 = Z1 +1
60056 IF ZV < > VAL(ZW$(Z)) THEN 60120
60058 IF ZU = 1 AND ZV < > VAL(ZW$(Z)) THEN 60120
60060 IF ZF$(Z) = "H" THEN 60120
60062 IF ZU = 1 AND ZV = VAL(ZW$(Z)) THEN ZQ$(Z1) = ""
60064 FOR Z2 = 1 TO ZI(Z)
60066 ZG = LEN(ZA$(Z)) -10
60068 VTAB ZD(Z): HTAB (ZE(Z) +1 +Z2 +ZG): GET ZL$: PRINT ZL$;
60070 ZM = ASC(ZL$): IF ZJ(Z) < >1 AND ZM = 32 AND Z2 = 1 THEN Z1 = Z1 +1
60072 IF ZJ(Z) < >1 AND ZM = 32 AND Z2 = 1 THEN GOTO 60120
60074 IF ZM = 27 THEN GOSUB 60178: RESTORE : GOTO 60002
60076 IF ZK$(Z) < >"D" AND Z2 < >1 AND ZM = 13 THEN GOTO 60112
60078 IF ZM < >8 THEN 60090
60080 IF Z2 = 1 THEN GOTO 60068
60082 Z2 = Z2 -1:ZO = LEN(ZN$)
60084 IF Z2 = 1 THEN ZN$ = ""
60086 IF Z2 >1 THEN ZN$ = LEFT$(ZN$,ZO -1)
60088 GOTO 60068
60090 ZP = 0: IF ZK$(Z) = "N" OR ZK$(Z) = "D" THEN GOSUB 60140
60092 IF ZK$(Z) = "A" THEN GOSUB 60146
60094 IF ZK$(Z) = "C" THEN GOSUB 60150
60096 IF ZP < >0 THEN GOSUB 60160
60098 IF ZP < >0 GOTO 60068
60100 ZN$ = ZN$ +ZL$: IF ZK$(Z) = "D" THEN GOSUB 60154
60102 IF ZP = 0 THEN GOTO 60110
60104 GOSUB 60160:ZO = LEN(ZN$): IF Z2 < = 2 THEN ZN$ = ""
60106 IF Z2 >2 THEN ZN$ = LEFT$(ZN$,ZO -2)
60108 Z2 = Z2 -1: GOTO 60068
60110 NEXT Z2: PRINT
60112 IF ZK$(Z) = "N" THEN GOSUB 60188
60114 ZQ$(Z1) = ZN$:Z1 = Z1 +1
60116 ZN$ = ""
60118 IF ZU = 1 THEN GOTO 60124
60120 NEXT Z
60122 PRINT
60124 ZU = 0: VTAB 23: CALL -868: INPUT "OPT: FLD CHG#, R)ENTER, OR E)XIT ?";ZT$: IF ZT$ = "E" THEN RETURN
60126 IF ZT$ = "R" THEN GOSUB 60178: RESTORE : GOTO 60002
60128 FOR Z1 = 1TPZC: IF ZF$(Z1) < >"D" OR ZT$ < >ZW$(Z1) THEN 60132
60130 ZL$ = "":ZN$ = "":ZU = 1:ZV = VAL(ZW$(Z1)):Z = Z1: GOSUB 60180: GOTO 60046
60132 NEXT Z1
60134 VTAB 23: CALL -868: PRINT "INVALID OPTION": FOR Z3 = 1 TO 1000: NEXT Z3: GOTO 60124
60136 RETURN
60138 VTAB 23: CALL -868: HTAB 10: PRINT "INVALID SCREEN NUMBER": FOR Z3 = 1 TO 1000: NEXT Z3: NORMAL :ZP = 1: RETURN
60140 ZM = ASC(ZL$): IF ZM = 47 THEN 60144
60142 IF ZM > = 45 AND ZM < = 57 THEN RETURN
60144 ZP = 1:ZR$ = "NON-NUMERIC": RETURN
60146 ZM = ASC(ZL$): IF ZM > = 65 AND ZM < = 90 THEN RETURN
60148 ZP = 1:ZR$ = "NON-ALPHA": RETURN
60150 ZM = ASC(ZL$): IF ZM > = 32 AND ZM < = 90 THEN RETURN
60152 ZP = 1:ZR$ = "NON-CHAR.": RETURN
60154 ZM = ASC(ZL$)
60156 ON Z2 GOSUB 60162,60164,60162,60170,60162,60174
60158 RETURN
60160 VTAB 23: HTAB 15: FLASH : PRINT ZR$: FOR Z3 = 1 TO 1000: NEXT Z3: NORMAL : VTAB 23: CALL -868: RETURN
60162 RETURN
60164 ZS = VAL( LEFT$(ZN$,2))
60166 IF ZS >0 AND ZS < = 12 THEN RETURN
60168 ZP = 1:ZR$ = "INVALID DATE": RETURN
60170 ZS = VAL( RIGHT$(ZN$,2)): IF ZS >0 AND ZS < = 31 THEN RETURN
60172 ZP = 1:ZR$ = "INVALID DATE": RETURN
60174 ZS = VAL( RIGHT$(ZN$,2)): IF ZS > = 0 AND ZS < = 99 THEN RETURN
60176 ZP = 1:ZR$ = "INVALID DATE": RETURN
60178 FOR Z1 = 1 TO 25:ZQ$(Z1) = "": NEXT Z1:ZL$ = "":ZN$ = "":ZU = 0: RETURN
60180 ZG = LEN(ZA$(Z)) -10
60182 ZH$(Z) = RIGHT$(ZA$(Z),ZG)
60184 VTAB ZD(Z): HTAB ZE(Z): PRINT ZH$(Z);
60186 FOR Z2 = 1 TO ZI(Z): HTAB (ZE(Z) +ZG +1 +Z2): PRINT CHR$(95);: NEXT Z2: PRINT : RETURN
60188 ZG$ = "000000":ZG = LEN(ZN$)
60190 FOR Z2 = 1 TO ZG
60192 IF MID$ (ZN$,Z2,1) < >"." THEN 60202
60194 IF ZX(Z) = 0 THEN ZN$ = LEFT$(ZN$,Z2)
60196 IF ZX(Z) = 0 THEN GOTO 60200
60198 ZN$ = ZN$ + LEFT$(ZG$,ZX(Z)):ZN$ = LEFT$(ZN$,Z2 +ZX(Z))
60200 Z2 = ZG: GOTO 60208
60202 NEXT Z2
60204 IF ZX(Z) = 0 THEN 60208
60206 ZN$ = ZN$ +"." + LEFT$(ZG$,ZX(Z))
60208 RETURN